//国际化配置
import dataLocale from '../locales';

/**
 * 国际化工具类
 */
export default {
  /**
   * 获取国际化资源
   * @param id 资源id，格式为string
   * @param values 变量，格式为Object
   */
  getMessage(id, values) {
    //原始的国际化资源
    let msg = dataLocale.messages[id];
    if (!msg) {
      return;
    }
    //取出所有的变量。为兼容IE，不使用先行断言。
    let list = msg.match(/\{[^{}\n]*(?=\})/g);
    if (list && list.length > 0) {
      list.forEach((item) => {
        //去掉{
        item = item.replace(/\{/, '');
        let re = new RegExp(`\{${item}\}`, 'g');
        //替换变量后的国际化资源
        msg = msg.replace(re, values[item]);
      });
    }
    return msg;
  },
  /**
   * 获取网路错误提示
   * @param msg 网络提示
   */
  getNetwork(msg) {
    let result = msg;
    if (msg.startsWith('timeout')) {
      let count = msg.match(/\s\d*(?=ms)/)[0]; //超时时间。为兼容IE，不使用先行断言。
      count = count.replace(/\s/, '');
      result = this.getMessage('network.timeout', {count});
    } else {
      let code = msg.match(/code\s\d*/); //状态码
      if (code) {
        code = code[0].replace(/code\s/, '');
        result = this.getMessage(`network.${code}`);
      } else {
        result = this.getMessage('network.common'); //如果该错误没有国际化，则使用通用提示
      }
    }
    return result;
  }
};
